<?php

/**
 * controller - Le controlleur principal de tous les formulaires du site
 Cette methode redirige vers les controlleurs adaptés les différents formulaires
 * @package
 * @author KPC
 * @copyright Copyright (c) 2011
 * @version $Id$
 * @access public
 */
class Controller {
	// Ce tableau va contenir tous nos controlleurs qui contiendront des traitements 'metiers'
	public static $controllerList = array ('operationController' );
	
	/**
	 * controller::route() Le point d'entrée de tous les formulaires après soumission
	 * Cette fonction va chercher parmi $controllerList la méthode adaptée au traitement du formulaire
	 * @return
	 */
	public function route() {
		$controller_method = isset ( $_POST ['controller_method'] ) ? $_POST ['controller_method'] : null;
		
		// Avant de traiter un nouveau formulaire, on supprime les données en mémoire pour tous les autres formulaires
		// Pour éviter qu'un précédent formulaire garde son message d'erreur par exemple
		foreach ( $_SESSION as $elementName => $element ) {
			if (strstr ( $elementName, 'form_' ) !== FALSE) {
				$_SESSION [$elementName] = '';
			}
		}
		
		// On parcourt la liste de nos controlleurs et si la méthode existe, on l'execute
		foreach ( self::$controllerList as $controller ) {
			if (method_exists ( $controller, $controller_method )) {
				$controller =  new $controller();
				$controller->$controller_method ();  
			}
		}
	}
	
	/**
	 * controller::getFieldSession() - Cette methode nous permet de récuperer une valeur de formulaire depuis le tableau de session
	 *
	 * @param mixed $formName Le nom 'controller_method' présent dans le formulaire.
	 * @param mixed $name Le nom de l'input dont on veut récuperer la valeur
	 exemple :
	 <form>
	 <input type="hidden" name="controlleur_method" value="login_utilisateur">
	 <input type="text" name="username">
	 </form>
	 controller::getFieldSession('login_utilisateur', 'username') retourne la valeur précedement entrée pour ce champ si elle existe
	 * @return
	 */
	public static function getFieldSession($formName, $name) {
		if (isset ( $_SESSION ['form_' . $formName] [$name] )) {
			return $_SESSION ['form_' . $formName] [$name];
		}
		return null;
	}
	
	/**
	 * controller::getField() - Similaire a la fonction précédente, sauf qu'elle doit être utilisée dans les controlleurs
	 * directement pour récuperer les variables du tableau $_POST
	 * @param mixed $formName
	 * @param mixed $name
	 * @return
	 */
	public static function getField($formName, $name) {
		if (isset ( $_POST [$name] ) && ! empty ( $_POST [$name] )) {
			$_SESSION ['form_' . $formName] [$name] = $_POST [$name];
			return $_POST [$name];
		} else if (isset ( $_SESSION ['form_' . $formName] [$name] )) {
			return $_SESSION ['form_' . $formName] [$name];
		}
		return null;
	}
	
	/**
	 * controller::setField() - Remplace la valeur d'un champ (utilisé en interne)
	 *
	 * @param mixed $formName
	 * @param mixed $name
	 * @param mixed $value
	 * @return
	 */
	public static function setField($formName, $name, $value) {
		$_SESSION ['form_' . $formName] [$name] = $value;
	}
	
	/**
	 * controller::getError() - Retourne le message d'erreur, si il existe pour un formulaire particulier
	 * (identifié par ca "controller_method")
	 * @param mixed $formName
	 * @return
	 */
	public static function getError($formName) {
		return isset ( $_SESSION ['form_' . $formName] ['error'] ) ? $_SESSION ['form_' . $formName] ['error'] : null;
	}
	
	/**
	 * controller::setSessionVariable() - Inclus une variable dans le tableau de session
	 *
	 * @param mixed $key La clé du tableau
	 * @param mixed $value La valeur à inclure
	 * @return
	 */
	public static function setSessionVariable($key, $value) {
		$_SESSION [$key] = $value;
	}
	
	/**
	 * controller::getSessionVariable() - Recuperere une variable depuis le tableau de sesssion
	 *
	 * @param mixed $key
	 * @return
	 */
	public static function getSessionVariable($key) {
		return isset ( $_SESSION [$key] ) ? $_SESSION [$key] : null;
	}
	
	/**
	 * controller::destroySessionVariable() - Supprime une variable du tableau de session
	 *
	 * @param mixed $key
	 * @return
	 */
	public static function destroySessionVariable($key) {
		if (isset ( $_SESSION [$key] )) {
			unset ( $_SESSION [$key] );
		}
	}
	
	/**
	 * controller::setError() - Inscrit une erreur dans un formulaire (identifié par sa "controller_method")
	 *
	 * @param mixed $formName  L'identifiant du formulaire (en réalité sa "controller_method")
	 * @param mixed $message
	 * @return
	 */
	public static function setError($formName, $message) {
		$_SESSION ['form_' . $formName] ['error'] = $message;
	}
	
	/**
	 * controller::removeError() - Supprime une erreur du formulaire
	 *
	 * @param mixed $formName
	 * @return
	 */
	public static function removeError($formName) {
		if (isset ( $_SESSION ['form_' . $formName] )) {
			$_SESSION ['form_' . $formName] = '';
			unset ( $_SESSION ['form_' . $formName] );
		}
	}
	
	/**
	 * controller::reload() - Recharge la page
	 *
	 * @return
	 */
	public static function reload() {
		header ( 'Location: index.php' );
	}
}

?>